#3814: Fallback to src/bin/main.rs for bins
authorJakub Matraszek <jakub.matraszek@gmail.com>
Sat, 11 Mar 2017 09:36:14 +0000 (10:36 +0100)
committerJakub Matraszek <jakub.matraszek@gmail.com>
Sat, 11 Mar 2017 09:36:14 +0000 (10:36 +0100)
src/cargo/util/toml.rs
tests/build.rs

index 5f41f49f44aa8a0bed2ce6472206e3cde51b9a8f..b0e948503989c58c72b095ad336ece9787de18dd 100644 (file)
@@ -1270,7 +1270,12 @@ fn normalize(package_root: &Path,
                 if package_root.join(&default_bin_path.0).exists() {
                     default_bin_path // inferred from bin's name
                 } else {
-                    PathValue(Path::new("src").join("main.rs"))
+                    let path = PathValue(Path::new("src").join("main.rs"));
+                    if package_root.join(&path.0).exists() {
+                        path
+                    } else {
+                        PathValue(Path::new("src").join("bin").join("main.rs"))
+                    }
                 }
             });
             let mut target = Target::bin_target(&bin.name(), package_root.join(&path.0),
index 433e2ed51e02d34f0d2e416daaae5b16c76b1694..dfa6241beabbc89288f280847eb9c4ef4b5af480 100644 (file)
@@ -2849,3 +2849,24 @@ fn run_proper_binary() {
     assert_that(p.cargo_process("run").arg("--bin").arg("other"),
                 execs().with_status(0));
 }
+
+#[test]
+fn run_proper_binary_main_rs() {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [package]
+            name = "foo"
+            authors = []
+            version = "0.0.0"
+            [[bin]]
+            name = "foo"
+        "#)
+        .file("src/lib.rs", "")
+        .file("src/bin/main.rs", r#"
+            fn main() {
+            }
+        "#);
+
+    assert_that(p.cargo_process("run").arg("--bin").arg("foo"),
+                execs().with_status(0));
+}